home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Art_of_Edg2162889182009.psc / Art of Edge Detection / Form1.frm next >
Text File  |  2009-07-24  |  37KB  |  1,096 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "Comdlg32.ocx"
  3. Begin VB.Form Form1 
  4.    AutoRedraw      =   -1  'True
  5.    Caption         =   "Art of Edge Detection by Hieppies"
  6.    ClientHeight    =   8985
  7.    ClientLeft      =   2775
  8.    ClientTop       =   1005
  9.    ClientWidth     =   14145
  10.    LinkTopic       =   "Form1"
  11.    ScaleHeight     =   599
  12.    ScaleMode       =   3  'Pixel
  13.    ScaleWidth      =   943
  14.    StartUpPosition =   2  'CenterScreen
  15.    Begin VB.PictureBox Pic10 
  16.       AutoRedraw      =   -1  'True
  17.       BackColor       =   &H00FFFFFF&
  18.       Height          =   2475
  19.       Left            =   6360
  20.       ScaleHeight     =   161
  21.       ScaleMode       =   3  'Pixel
  22.       ScaleWidth      =   124
  23.       TabIndex        =   19
  24.       Top             =   6360
  25.       Width           =   1920
  26.    End
  27.    Begin VB.PictureBox Pic9 
  28.       AutoRedraw      =   -1  'True
  29.       BackColor       =   &H00FFFFFF&
  30.       Height          =   2475
  31.       Left            =   4320
  32.       ScaleHeight     =   161
  33.       ScaleMode       =   3  'Pixel
  34.       ScaleWidth      =   124
  35.       TabIndex        =   17
  36.       Top             =   6360
  37.       Width           =   1920
  38.    End
  39.    Begin VB.PictureBox Pic8 
  40.       AutoRedraw      =   -1  'True
  41.       BackColor       =   &H00FFFFFF&
  42.       Height          =   2475
  43.       Left            =   2280
  44.       ScaleHeight     =   161
  45.       ScaleMode       =   3  'Pixel
  46.       ScaleWidth      =   124
  47.       TabIndex        =   15
  48.       Top             =   6360
  49.       Width           =   1920
  50.    End
  51.    Begin VB.PictureBox Pic7 
  52.       AutoRedraw      =   -1  'True
  53.       BackColor       =   &H00FFFFFF&
  54.       Height          =   2475
  55.       Left            =   4320
  56.       ScaleHeight     =   161
  57.       ScaleMode       =   3  'Pixel
  58.       ScaleWidth      =   124
  59.       TabIndex        =   12
  60.       Top             =   3360
  61.       Width           =   1920
  62.    End
  63.    Begin VB.PictureBox Pic6 
  64.       AutoRedraw      =   -1  'True
  65.       BackColor       =   &H00FFFFFF&
  66.       Height          =   2475
  67.       Left            =   2280
  68.       ScaleHeight     =   161
  69.       ScaleMode       =   3  'Pixel
  70.       ScaleWidth      =   124
  71.       TabIndex        =   11
  72.       Top             =   3360
  73.       Width           =   1920
  74.    End
  75.    Begin VB.PictureBox Pic5 
  76.       AutoRedraw      =   -1  'True
  77.       BackColor       =   &H00FFFFFF&
  78.       Height          =   2475
  79.       Left            =   8400
  80.       ScaleHeight     =   161
  81.       ScaleMode       =   3  'Pixel
  82.       ScaleWidth      =   124
  83.       TabIndex        =   5
  84.       Top             =   360
  85.       Width           =   1920
  86.    End
  87.    Begin VB.PictureBox Pic4 
  88.       AutoRedraw      =   -1  'True
  89.       BackColor       =   &H00FFFFFF&
  90.       Height          =   2475
  91.       Left            =   6360
  92.       ScaleHeight     =   161
  93.       ScaleMode       =   3  'Pixel
  94.       ScaleWidth      =   124
  95.       TabIndex        =   4
  96.       Top             =   360
  97.       Width           =   1920
  98.    End
  99.    Begin VB.PictureBox Pic3 
  100.       AutoRedraw      =   -1  'True
  101.       BackColor       =   &H00FFFFFF&
  102.       Height          =   2475
  103.       Left            =   4320
  104.       ScaleHeight     =   161
  105.       ScaleMode       =   3  'Pixel
  106.       ScaleWidth      =   124
  107.       TabIndex        =   3
  108.       Top             =   360
  109.       Width           =   1920
  110.    End
  111.    Begin VB.TextBox Text1 
  112.       Height          =   8415
  113.       Left            =   10560
  114.       Locked          =   -1  'True
  115.       MultiLine       =   -1  'True
  116.       ScrollBars      =   3  'Both
  117.       TabIndex        =   2
  118.       Top             =   360
  119.       Width           =   3375
  120.    End
  121.    Begin MSComDlg.CommonDialog CM 
  122.       Left            =   0
  123.       Top             =   5280
  124.       _ExtentX        =   847
  125.       _ExtentY        =   847
  126.       _Version        =   393216
  127.    End
  128.    Begin VB.PictureBox Pic2 
  129.       AutoRedraw      =   -1  'True
  130.       BackColor       =   &H00FFFFFF&
  131.       Height          =   2475
  132.       Left            =   2280
  133.       ScaleHeight     =   161
  134.       ScaleMode       =   3  'Pixel
  135.       ScaleWidth      =   124
  136.       TabIndex        =   1
  137.       Top             =   360
  138.       Width           =   1920
  139.    End
  140.    Begin VB.PictureBox Pic1 
  141.       AutoRedraw      =   -1  'True
  142.       BackColor       =   &H00FFFFFF&
  143.       Height          =   2475
  144.       Left            =   120
  145.       Picture         =   "Form1.frx":0000
  146.       ScaleHeight     =   161
  147.       ScaleMode       =   3  'Pixel
  148.       ScaleWidth      =   124
  149.       TabIndex        =   0
  150.       Top             =   360
  151.       Width           =   1920
  152.    End
  153.    Begin VB.Label Label1 
  154.       AutoSize        =   -1  'True
  155.       BackStyle       =   0  'Transparent
  156.       Caption         =   "Canny Edge"
  157.       BeginProperty Font 
  158.          Name            =   "MS Sans Serif"
  159.          Size            =   9.75
  160.          Charset         =   0
  161.          Weight          =   700
  162.          Underline       =   0   'False
  163.          Italic          =   0   'False
  164.          Strikethrough   =   0   'False
  165.       EndProperty
  166.       Height          =   240
  167.       Index           =   9
  168.       Left            =   6360
  169.       TabIndex        =   20
  170.       Top             =   6120
  171.       Width           =   1275
  172.    End
  173.    Begin VB.Label Label1 
  174.       AutoSize        =   -1  'True
  175.       BackStyle       =   0  'Transparent
  176.       Caption         =   "Canny Grayscale"
  177.       BeginProperty Font 
  178.          Name            =   "MS Sans Serif"
  179.          Size            =   9.75
  180.          Charset         =   0
  181.          Weight          =   700
  182.          Underline       =   0   'False
  183.          Italic          =   0   'False
  184.          Strikethrough   =   0   'False
  185.       EndProperty
  186.       Height          =   240
  187.       Index           =   8
  188.       Left            =   4320
  189.       TabIndex        =   18
  190.       Top             =   6120
  191.       Width           =   1785
  192.    End
  193.    Begin VB.Label Label1 
  194.       AutoSize        =   -1  'True
  195.       BackStyle       =   0  'Transparent
  196.       Caption         =   "Canny Gaussian"
  197.       BeginProperty Font 
  198.          Name            =   "MS Sans Serif"
  199.          Size            =   9.75
  200.          Charset         =   0
  201.          Weight          =   700
  202.          Underline       =   0   'False
  203.          Italic          =   0   'False
  204.          Strikethrough   =   0   'False
  205.       EndProperty
  206.       Height          =   240
  207.       Index           =   7
  208.       Left            =   2280
  209.       TabIndex        =   16
  210.       Top             =   6120
  211.       Width           =   1695
  212.    End
  213.    Begin VB.Line Line4 
  214.       X1              =   144
  215.       X2              =   696
  216.       Y1              =   400
  217.       Y2              =   400
  218.    End
  219.    Begin VB.Label Label1 
  220.       AutoSize        =   -1  'True
  221.       BackStyle       =   0  'Transparent
  222.       Caption         =   "Gaussian"
  223.       BeginProperty Font 
  224.          Name            =   "MS Sans Serif"
  225.          Size            =   9.75
  226.          Charset         =   0
  227.          Weight          =   700
  228.          Underline       =   0   'False
  229.          Italic          =   0   'False
  230.          Strikethrough   =   0   'False
  231.       EndProperty
  232.       Height          =   240
  233.       Index           =   6
  234.       Left            =   4320
  235.       TabIndex        =   14
  236.       Top             =   3120
  237.       Width           =   990
  238.    End
  239.    Begin VB.Label Label1 
  240.       AutoSize        =   -1  'True
  241.       BackStyle       =   0  'Transparent
  242.       Caption         =   "Mean"
  243.       BeginProperty Font 
  244.          Name            =   "MS Sans Serif"
  245.          Size            =   9.75
  246.          Charset         =   0
  247.          Weight          =   700
  248.          Underline       =   0   'False
  249.          Italic          =   0   'False
  250.          Strikethrough   =   0   'False
  251.       EndProperty
  252.       Height          =   240
  253.       Index           =   5
  254.       Left            =   2280
  255.       TabIndex        =   13
  256.       Top             =   3120
  257.       Width           =   585
  258.    End
  259.    Begin VB.Label Label1 
  260.       AutoSize        =   -1  'True
  261.       BackStyle       =   0  'Transparent
  262.       Caption         =   "Sobel"
  263.       BeginProperty Font 
  264.          Name            =   "MS Sans Serif"
  265.          Size            =   9.75
  266.          Charset         =   0
  267.          Weight          =   700
  268.          Underline       =   0   'False
  269.          Italic          =   0   'False
  270.          Strikethrough   =   0   'False
  271.       EndProperty
  272.       Height          =   240
  273.       Index           =   4
  274.       Left            =   8400
  275.       TabIndex        =   10
  276.       Top             =   120
  277.       Width           =   630
  278.    End
  279.    Begin VB.Label Label1 
  280.       AutoSize        =   -1  'True
  281.       BackStyle       =   0  'Transparent
  282.       Caption         =   "Robert"
  283.       BeginProperty Font 
  284.          Name            =   "MS Sans Serif"
  285.          Size            =   9.75
  286.          Charset         =   0
  287.          Weight          =   700
  288.          Underline       =   0   'False
  289.          Italic          =   0   'False
  290.          Strikethrough   =   0   'False
  291.       EndProperty
  292.       Height          =   240
  293.       Index           =   3
  294.       Left            =   6360
  295.       TabIndex        =   9
  296.       Top             =   120
  297.       Width           =   720
  298.    End
  299.    Begin VB.Label Label1 
  300.       AutoSize        =   -1  'True
  301.       BackStyle       =   0  'Transparent
  302.       Caption         =   "Prewit"
  303.       BeginProperty Font 
  304.          Name            =   "MS Sans Serif"
  305.          Size            =   9.75
  306.          Charset         =   0
  307.          Weight          =   700
  308.          Underline       =   0   'False
  309.          Italic          =   0   'False
  310.          Strikethrough   =   0   'False
  311.       EndProperty
  312.       Height          =   240
  313.       Index           =   2
  314.       Left            =   4320
  315.       TabIndex        =   8
  316.       Top             =   120
  317.       Width           =   645
  318.    End
  319.    Begin VB.Label Label1 
  320.       AutoSize        =   -1  'True
  321.       BackStyle       =   0  'Transparent
  322.       Caption         =   "Isotropic"
  323.       BeginProperty Font 
  324.          Name            =   "MS Sans Serif"
  325.          Size            =   9.75
  326.          Charset         =   0
  327.          Weight          =   700
  328.          Underline       =   0   'False
  329.          Italic          =   0   'False
  330.          Strikethrough   =   0   'False
  331.       EndProperty
  332.       Height          =   240
  333.       Index           =   1
  334.       Left            =   2280
  335.       TabIndex        =   7
  336.       Top             =   120
  337.       Width           =   915
  338.    End
  339.    Begin VB.Label Label1 
  340.       AutoSize        =   -1  'True
  341.       BackStyle       =   0  'Transparent
  342.       Caption         =   "Original"
  343.       BeginProperty Font 
  344.          Name            =   "MS Sans Serif"
  345.          Size            =   9.75
  346.          Charset         =   0
  347.          Weight          =   700
  348.          Underline       =   0   'False
  349.          Italic          =   0   'False
  350.          Strikethrough   =   0   'False
  351.       EndProperty
  352.       Height          =   240
  353.       Index           =   0
  354.       Left            =   120
  355.       TabIndex        =   6
  356.       Top             =   120
  357.       Width           =   825
  358.    End
  359.    Begin VB.Line Line3 
  360.       X1              =   0
  361.       X2              =   696
  362.       Y1              =   200
  363.       Y2              =   200
  364.    End
  365.    Begin VB.Line Line2 
  366.       X1              =   696
  367.       X2              =   696
  368.       Y1              =   0
  369.       Y2              =   608
  370.    End
  371.    Begin VB.Line Line1 
  372.       X1              =   144
  373.       X2              =   144
  374.       Y1              =   0
  375.       Y2              =   616
  376.    End
  377.    Begin VB.Menu mnufile 
  378.       Caption         =   "File"
  379.       Begin VB.Menu mnuload 
  380.          Caption         =   "Load Gambar..."
  381.       End
  382.       Begin VB.Menu mnuquit 
  383.          Caption         =   "&Keluar"
  384.       End
  385.    End
  386.    Begin VB.Menu mnufilter 
  387.       Caption         =   "Filter"
  388.       Begin VB.Menu mnuoperator 
  389.          Caption         =   "Deteksi Tepi"
  390.          Begin VB.Menu mnuisothropic 
  391.             Caption         =   "&Metode Isotropic"
  392.             Shortcut        =   {F1}
  393.          End
  394.          Begin VB.Menu mnuprewit 
  395.             Caption         =   "&Metode Prewit"
  396.             Shortcut        =   {F2}
  397.          End
  398.          Begin VB.Menu mnurobert 
  399.             Caption         =   "&Metode Robert"
  400.             Shortcut        =   {F3}
  401.          End
  402.          Begin VB.Menu mnusobel 
  403.             Caption         =   "&Metode Sobel"
  404.             Shortcut        =   {F4}
  405.          End
  406.          Begin VB.Menu vbsep 
  407.             Caption         =   "-"
  408.          End
  409.          Begin VB.Menu mnucanny 
  410.             Caption         =   "&Metode Canny"
  411.             Shortcut        =   {F5}
  412.          End
  413.       End
  414.       Begin VB.Menu vbsep1 
  415.          Caption         =   "-"
  416.       End
  417.       Begin VB.Menu mnublur 
  418.          Caption         =   "Blur"
  419.          Begin VB.Menu mnusmooth 
  420.             Caption         =   "Mean"
  421.             Shortcut        =   {F6}
  422.          End
  423.          Begin VB.Menu mnugaussian 
  424.             Caption         =   "Gaussian"
  425.             Shortcut        =   {F7}
  426.          End
  427.       End
  428.    End
  429. End
  430. Attribute VB_Name = "Form1"
  431. Attribute VB_GlobalNameSpace = False
  432. Attribute VB_Creatable = False
  433. Attribute VB_PredeclaredId = True
  434. Attribute VB_Exposed = False
  435. Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
  436. Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
  437.  
  438. Dim R As Integer, G As Integer, B As Integer
  439. Dim Itensity As Long, GradX As Long, GradY As Long, Grad As Long
  440. Dim PixelValue As Long
  441.  
  442. Sub DecTORGB(ByVal Col As Long, R As Integer, G As Integer, B As Integer)
  443.     R = Col Mod 256
  444.     G = ((Col - R) Mod 65536) / 256
  445.     B = (Col - R - G) / 65536
  446.     If R < 0 Then R = 0: If R >= 255 Then R = 255
  447.     If G < 0 Then G = 0: If G >= 255 Then G = 255
  448.     If B < 0 Then B = 0: If B >= 255 Then B = 255
  449. End Sub
  450.  
  451.  
  452. Private Sub mnugaussian_Click()
  453. On Error GoTo ErrHandle
  454. Const MaxData = 255
  455. Const DataGranularity = 1
  456. Const Delta = DataGranularity / (2 * MaxData)
  457.  
  458. Dim X As Integer, Y As Integer
  459. Dim fBias As Integer, fScaleFactor As Single
  460. Dim fRadius As Single, Sum As Single, RR2 As Single
  461. Dim MaxGaussianSize As Integer, GaussianSize As Integer
  462. Dim GaussianKernel() As Double, Kernel() As Single
  463. Dim KernelSize As Long
  464. Dim fKernel As Long, fWidth As Long, fHeight As Long, fCount As Long
  465. Dim SF As Single, Rad As Single, W As Single, C As Single
  466. Dim KWH As Long, KWL As Long, KHH As Long, KHL As Long
  467.  
  468. MaxGaussianSize = 50
  469. fBias = 0: fScaleFactor = 1: fCount = 1
  470. fRadius = InputBox("Masukkan Angka Tetha antara [0.5 - 2] : ", "Gaussian Blur Radius")
  471. If fRadius < 0 Then fRadius = 0
  472. If fRadius > 10 Then MsgBox "Masukkan angka antara [0.5 - 2]", vbInformation, "Angka Kelebihan": Exit Sub
  473. ReDim GaussianKernel(-MaxGaussianSize To MaxGaussianSize, -MaxGaussianSize To MaxGaussianSize)
  474.  
  475.  
  476. Sum = 0
  477. RR2 = -2 * fRadius * fRadius
  478.  
  479. For Y = -MaxGaussianSize To MaxGaussianSize
  480.     For X = -MaxGaussianSize To MaxGaussianSize
  481.         GaussianKernel(Y, X) = Exp((X * X + Y * Y) / RR2)
  482.         Sum = Sum + GaussianKernel(Y, X)
  483.     Next X
  484. Next Y
  485.  
  486. For Y = -MaxGaussianSize To MaxGaussianSize
  487.     For X = -MaxGaussianSize To MaxGaussianSize
  488.         GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
  489.     Next X
  490. Next Y
  491.  
  492. Sum = 0
  493. GaussianSize = MaxGaussianSize
  494. Do While (GaussianSize > 1) And (Sum < Delta)
  495.     Sum = Sum + 4 * GaussianKernel(0, GaussianSize)
  496.     GaussianSize = GaussianSize - 1
  497. Loop
  498.  
  499. For Y = -GaussianSize To GaussianSize
  500.     For X = -GaussianSize To GaussianSize
  501.         Sum = Sum + GaussianKernel(Y, X)
  502.     Next X
  503. Next Y
  504.  
  505. For Y = -GaussianSize To GaussianSize
  506.     For X = -GaussianSize To GaussianSize
  507.         GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
  508.     Next X
  509. Next Y
  510.  
  511. KernelSize = (2 * GaussianSize) + 1
  512. SF = 0: Rad = 1
  513. Dim RKernel(99999) As Single, cnt As Integer
  514. cnt = 0
  515. For Y = -GaussianSize To GaussianSize
  516.     C = 0
  517.     For X = -GaussianSize To GaussianSize
  518.         W = Round((1 / GaussianKernel(GaussianSize, GaussianSize)) * GaussianKernel(Y, X))
  519.         RKernel(cnt) = W
  520.         SF = SF + W
  521.         C = C + 1
  522.         cnt = cnt + 1
  523.     Next X
  524.     Rad = Rad + 1
  525. Next Y
  526. fScaleFactor = SF
  527.  
  528. Me.Cls
  529. ReDim Kernel(1, Rad, C)
  530. cnt = 0
  531. Dim tmps As String
  532. Text1.Text = Text1.Text & vbCrLf
  533. Text1.Text = Text1.Text + "Hasil Kalkulasi Kernel untuk Gaussian Blur >>" & vbCrLf
  534. Text1.SelStart = Len(Text1.Text)
  535. ReDim Kernel(0 To 1, -GaussianSize To GaussianSize, -GaussianSize To GaussianSize)
  536. For I = -GaussianSize To GaussianSize
  537.     For J = -GaussianSize To GaussianSize
  538.         Kernel(1, I, J) = RKernel(cnt)
  539.         tmps = tmps & Format(Kernel(1, I, J), "000") & " "
  540.         cnt = cnt + 1
  541.     Next J
  542.     Text1.Text = Text1.Text + tmps & vbCrLf
  543.     tmps = ""
  544. Next I
  545.  
  546. Text1.Text = Text1.Text + "Menggunakan Theta = " & fRadius & " dan Ukuran Kernel = " & KernelSize & " x " & KernelSize & " Pixel" & vbCrLf
  547. Text1.Text = Text1.Text + "Mengunakan Fungsi gambar 2D" & vbCrLf
  548. Text1.SelStart = Len(Text1.Text)
  549.  
  550. Pic7.Cls
  551. Dim tmpIntR As Double, tmpIntG As Double, tmpIntB As Double
  552. Dim CTotal As Single
  553. Dim CDataR As Single, CDataG As Single, CDataB As Single
  554.  
  555. CTotal = (((GaussianSize * GaussianSize) + GaussianSize) * 4) + 1
  556. Dim tmpC As Long
  557. Dim CountClr As Long
  558.  
  559. For Y = 0 To Pic1.Height - 1
  560.     For X = 0 To Pic1.Width
  561.         For J = -GaussianSize To GaussianSize
  562.             For I = -GaussianSize To GaussianSize
  563.                  PixelValue = GetPixel(Pic1.hdc, X + I, Y + J)
  564.                  DecTORGB PixelValue, R, G, B
  565.                  CDataR = CDataR + (Kernel(1, J, I) * R)
  566.                  CDataG = CDataG + (Kernel(1, J, I) * G)
  567.                  CDataB = CDataB + (Kernel(1, J, I) * B)
  568.                  If mX < C Then mX = mX + 1
  569.             Next I
  570.         Next J
  571.         CDataR = CDataR / (fScaleFactor + fBias)
  572.         CDataG = CDataG / (fScaleFactor + fBias)
  573.         CDataB = CDataB / (fScaleFactor + fBias)
  574.         SetPixel Pic7.hdc, X, Y, RGB(CDataR, CDataG, CDataB)
  575.         Pic7.Refresh
  576.         DoEvents
  577.     Next X
  578.     Pic7.Refresh
  579. Next Y
  580. Pic7.Refresh
  581. Exit Sub
  582. ErrHandle:
  583. Exit Sub
  584. End Sub
  585.  
  586. Private Sub mnuisothropic_Click()
  587. Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer
  588. Dim X As Integer, Y As Integer, I As Integer, J As Integer
  589. Pic2.Cls
  590. Grad = 0
  591. Op_X(-1, -1) = -1: Op_X(0, -1) = -(Sqr(2)): Op_X(1, -1) = -1
  592. Op_X(-1, 0) = 0: Op_X(0, 0) = 0: Op_X(1, 0) = 0
  593. Op_X(-1, 1) = 1: Op_X(0, 1) = (Sqr(2)): Op_X(1, 1) = 1
  594.  
  595. Op_Y(-1, -1) = -1: Op_Y(0, -1) = 0: Op_Y(1, -1) = 1
  596. Op_Y(-1, 0) = -(Sqr(2)): Op_Y(0, 0) = 0: Op_Y(1, 0) = (Sqr(2))
  597. Op_Y(-1, 1) = -1: Op_Y(0, 1) = 0: Op_Y(1, 1) = 1
  598.  
  599. Dim tmps As String
  600. tmps = "Menggunakan Kernel untuk Isotropic" & vbCrLf & "Horisontal >>" & vbCrLf
  601. For X = -1 To 1
  602.     For Y = -1 To 1
  603.         tmps = tmps & Format(Op_X(X, Y), "0") & " "
  604.     Next Y
  605.     tmps = tmps & vbCrLf
  606. Next X
  607. tmps = tmps & "Vertikal >>" & vbCrLf
  608. For X = -1 To 1
  609.     For Y = -1 To 1
  610.         tmps = tmps & Format(Op_Y(X, Y), "0") & " "
  611.     Next Y
  612.     tmps = tmps & vbCrLf
  613. Next X
  614. Text1.Text = Text1.Text & tmps & vbCrLf
  615. DoEvents
  616. For Y = 0 To Pic1.Height - 1
  617.     For X = 0 To Pic1.Width - 1
  618.         GradX = 0: GradY = 0: Grad = 0
  619.         If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
  620.             Grad = 0
  621.         Else
  622.             For I = -1 To 1
  623.                 For J = -1 To 1
  624.                 PixelValue = GetPixel(Pic1.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  625.                 DecTORGB PixelValue, R, G, B 'fungsi proses mendapatkan nilai RGB
  626.                 Itensity = (R + G + B) / 3 'Itensitas / B & W
  627.                 GradX = GradX + (Itensity * Op_X(I, J))
  628.                 GradY = GradY + (Itensity * Op_Y(I, J))
  629.                 Next J
  630.             Next I
  631.             Grad = Round(Sqr(Abs(GradX * GradX) + Abs(GradY * GradY)))
  632.         End If
  633.         If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
  634.         SetPixel Pic2.hdc, X, Y, RGB(Grad, Grad, Grad)
  635.         Pic2.Refresh
  636.     Next X
  637.     Pic2.Refresh
  638. Next Y
  639.  
  640. End Sub
  641.  
  642. Private Sub mnuload_Click()
  643. Dim Token As Long
  644. CM.Filter = "Image|*.bmp;*.jpg"
  645. CM.ShowOpen
  646. If CM.FileName <> "" Then
  647. Token = InitGDIPlus
  648. Pic1.Picture = LoadPictureGDIPlus(CM.FileName, Pic1.Width, Pic1.Height, , False)
  649. FreeGDIPlus Token
  650. End If
  651. Text1.Text = ""
  652. End Sub
  653.  
  654. Private Sub mnuprewit_Click()
  655. Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer
  656. Dim X As Integer, Y As Integer, I As Integer, J As Integer
  657. Pic3.Cls
  658. Grad = 0
  659. Op_X(-1, -1) = -1: Op_X(0, -1) = -1: Op_X(1, -1) = -1
  660. Op_X(-1, 0) = 0: Op_X(0, 0) = 0: Op_X(1, 0) = 0
  661. Op_X(-1, 1) = 1: Op_X(0, 1) = 1: Op_X(1, 1) = 1
  662.  
  663. Op_Y(-1, -1) = 1: Op_Y(0, -1) = 0: Op_Y(1, -1) = -1
  664. Op_Y(-1, 0) = 0: Op_Y(0, 0) = 0: Op_Y(1, 0) = 0
  665. Op_Y(-1, 1) = 1: Op_Y(0, 1) = 0: Op_Y(1, 1) = -1
  666.  
  667. Dim tmps As String
  668. tmps = "Menggunakan Kernel untuk Prewit" & vbCrLf & "Horisontal >>" & vbCrLf
  669. For X = -1 To 1
  670.     For Y = -1 To 1
  671.         tmps = tmps & Format(Op_X(X, Y), "0") & " "
  672.     Next Y
  673.     tmps = tmps & vbCrLf
  674. Next X
  675. tmps = tmps & "Vertikal >>" & vbCrLf
  676. For X = -1 To 1
  677.     For Y = -1 To 1
  678.         tmps = tmps & Format(Op_Y(X, Y), "0") & " "
  679.     Next Y
  680.     tmps = tmps & vbCrLf
  681. Next X
  682. Text1.Text = Text1.Text & tmps & vbCrLf
  683. DoEvents
  684.  
  685. For Y = 0 To Pic1.Height - 1
  686.     For X = 0 To Pic1.Width - 1
  687.         GradX = 0: GradY = 0: Grad = 0
  688.         If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
  689.             Grad = 0
  690.         Else
  691.             For I = -1 To 1
  692.                 For J = -1 To 1
  693.                 PixelValue = GetPixel(Pic1.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  694.                 DecTORGB PixelValue, R, G, B 'fungsi proses mendapatkan nilai RGB
  695.                 Itensity = (R + G + B) / 3 'Itensitas / B & W
  696.                 GradX = GradX + (Itensity * Op_X(I, J))
  697.                 GradY = GradY + (Itensity * Op_Y(I, J))
  698.                 Next J
  699.             Next I
  700.             Grad = Round(Sqr(Abs(GradX * GradX) + Abs(GradY * GradY)))
  701.         End If
  702.         If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
  703.         SetPixel Pic3.hdc, X, Y, RGB(Grad, Grad, Grad)
  704.         Pic3.Refresh
  705.     Next X
  706.     Pic3.Refresh
  707. Next Y
  708.  
  709. End Sub
  710.  
  711. Private Sub mnurobert_Click()
  712. Dim Op_X(-1 To 0, -1 To 0) As Integer, Op_Y(-1 To 0, -1 To 0) As Integer
  713. Dim X As Integer, Y As Integer, I As Integer, J As Integer
  714. Pic4.Cls
  715. Grad = 0
  716. Op_X(-1, -1) = 1: Op_X(0, -1) = 0
  717. Op_X(-1, 0) = 0: Op_X(0, 0) = -1
  718. Op_Y(-1, -1) = 0: Op_Y(0, -1) = -1
  719. Op_Y(-1, 0) = 1: Op_Y(0, 0) = 0
  720.  
  721. Dim tmps As String
  722. tmps = "Menggunakan Kernel untuk Robert" & vbCrLf & "Horisontal >>" & vbCrLf
  723. For X = -1 To 0
  724.     For Y = -1 To 0
  725.         tmps = tmps & Format(Op_X(X, Y), "0") & " "
  726.     Next Y
  727.     tmps = tmps & vbCrLf
  728. Next X
  729. tmps = tmps & "Vertikal >>" & vbCrLf
  730. For X = -1 To 0
  731.     For Y = -1 To 0
  732.         tmps = tmps & Format(Op_Y(X, Y), "0") & " "
  733.     Next Y
  734.     tmps = tmps & vbCrLf
  735. Next X
  736. Text1.Text = Text1.Text & tmps & vbCrLf
  737. DoEvents
  738.  
  739. For Y = 0 To Pic1.Height - 1
  740.     For X = 0 To Pic1.Width - 1
  741.         GradX = 0: GradY = 0: Grad = 0
  742.         If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
  743.             Grad = 0
  744.         Else
  745.             For I = -1 To 0
  746.                 For J = -1 To 0
  747.                 PixelValue = GetPixel(Pic1.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  748.                 DecTORGB PixelValue, R, G, B 'fungsi proses mendapatkan nilai RGB
  749.                 Itensity = (R + G + B) / 3 'Itensitas / B & W
  750.                 GradX = GradX + (Itensity * Op_X(I, J))
  751.                 GradY = GradY + (Itensity * Op_Y(I, J))
  752.                 Next J
  753.             Next I
  754.             Grad = Round(Sqr(Abs(GradX * GradX) + Abs(GradY * GradY)))
  755.         End If
  756.         If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
  757.         SetPixel Pic4.hdc, X, Y, RGB(Grad, Grad, Grad)
  758.         Pic4.Refresh
  759.     Next X
  760.     Pic4.Refresh
  761. Next Y
  762.  
  763. End Sub
  764.  
  765. Private Sub mnusmooth_Click()
  766. On Error GoTo ErrHandle
  767. Dim X As Integer, Y As Integer
  768. Dim mR As Integer, mG As Integer, mB As Integer
  769. Dim mR1 As Integer, mR2 As Integer, mR3 As Integer, mR4 As Integer, mR5 As Integer
  770. Dim mG1 As Integer, mG2 As Integer, mG3 As Integer, mG4 As Integer, mG5 As Integer
  771. Dim mB1 As Integer, mB2 As Integer, mB3 As Integer, mB4 As Integer, mB5 As Integer
  772. Dim mPixel1 As Long, mPixel2 As Long, mPixel3 As Long, mPixel4 As Long, mPixel5 As Long
  773. Dim inpNum As Integer
  774. Pic6.Cls
  775. inpNum = 4
  776.  
  777. For Y = 1 To Pic1.Height - 2
  778.     For X = 1 To Pic1.Width - 2
  779.         mPixel1 = GetPixel(Pic1.hdc, X, Y)
  780.         mPixel2 = GetPixel(Pic1.hdc, X + 1, Y)
  781.         mPixel2 = GetPixel(Pic1.hdc, X - 1, Y)
  782.         mPixel3 = GetPixel(Pic1.hdc, X, Y + 1)
  783.         mPixel4 = GetPixel(Pic1.hdc, X, Y - 1)
  784.         DecTORGB mPixel1, mR1, mG1, mB1
  785.         DecTORGB mPixel2, mR2, mG2, mB2
  786.         DecTORGB mPixel3, mR3, mG3, mB3
  787.         DecTORGB mPixel4, mR4, mG4, mB4
  788.         DecTORGB mPixel5, mR5, mG5, mB5
  789.         If mR1 < 0 Then mR1 = 0
  790.         mR = mR1 + mR2 + mR3 + mR4 + mR5
  791.         mR = mR / inpNum
  792.         mG = mG1 + mG2 + mG3 + mG4 + mG5
  793.         mG = mG / inpNum
  794.         mB = mB1 + mB2 + mB3 + mB4 + mB5
  795.         mB = mB / inpNum
  796.         
  797.         SetPixel Pic6.hdc, X, Y, RGB(mR, mG, mB)
  798.     Next X
  799.     Pic6.Refresh
  800.     DoEvents
  801. Next Y
  802. Exit Sub
  803. ErrHandle:
  804. 'MsgBox "Bukan Angka!.", vbCritical, "Error"
  805. Exit Sub
  806. End Sub
  807.  
  808. Private Sub mnusobel_Click()
  809. Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer
  810. Dim X As Integer, Y As Integer, I As Integer, J As Integer
  811. Pic5.Cls
  812. Grad = 0
  813. Op_X(-1, -1) = -1: Op_X(0, -1) = -2: Op_X(1, -1) = -1
  814. Op_X(-1, 0) = 0: Op_X(0, 0) = 0: Op_X(1, 0) = 0
  815. Op_X(-1, 1) = 1: Op_X(0, 1) = 2: Op_X(1, 1) = 1
  816.  
  817. Op_Y(-1, -1) = -1: Op_Y(0, -1) = 0: Op_Y(1, -1) = 1
  818. Op_Y(-1, 0) = -2: Op_Y(0, 0) = 0: Op_Y(1, 0) = 2
  819. Op_Y(-1, 1) = -1: Op_Y(0, 1) = 0: Op_Y(1, 1) = 1
  820.  
  821. Dim tmps As String
  822. tmps = "Menggunakan Kernel untuk Sobel" & vbCrLf & "Horisontal >>" & vbCrLf
  823. For X = -1 To 1
  824.     For Y = -1 To 1
  825.         tmps = tmps & Format(Op_X(X, Y), "0") & " "
  826.     Next Y
  827.     tmps = tmps & vbCrLf
  828. Next X
  829. tmps = tmps & "Vertikal >>" & vbCrLf
  830. For X = -1 To 1
  831.     For Y = -1 To 1
  832.         tmps = tmps & Format(Op_Y(X, Y), "0") & " "
  833.     Next Y
  834.     tmps = tmps & vbCrLf
  835. Next X
  836. Text1.Text = Text1.Text & tmps & vbCrLf
  837. DoEvents
  838.  
  839. For Y = 0 To Pic1.Height - 1
  840.     For X = 0 To Pic1.Width - 1
  841.         GradX = 0: GradY = 0: Grad = 0
  842.         If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
  843.             Grad = 0
  844.         Else
  845.             For I = -1 To 1
  846.                 For J = -1 To 1
  847.                 PixelValue = GetPixel(Pic1.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  848.                 DecTORGB PixelValue, R, G, B 'fungsi proses mendapatkan nilai RGB
  849.                 Itensity = (R + G + B) / 3 'Itensitas / B & W
  850.                 GradX = GradX + (Itensity * Op_X(I, J))
  851.                 GradY = GradY + (Itensity * Op_Y(I, J))
  852.                 Next J
  853.             Next I
  854.             Grad = Round(Sqr(Abs(GradX * GradX) + Abs(GradY * GradY)))
  855.         End If
  856.         If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
  857.         SetPixel Pic5.hdc, X, Y, RGB(Grad, Grad, Grad)
  858.         Pic5.Refresh
  859.     Next X
  860.     Pic5.Refresh
  861. Next Y
  862. End Sub
  863.  
  864. Private Sub mnucanny_Click()
  865. On Error GoTo ErrHandle
  866. Const MaxData = 255
  867. Const DataGranularity = 1
  868. Const Delta = DataGranularity / (2 * MaxData)
  869.  
  870. Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer
  871.  
  872. Op_X(-1, -1) = -1: Op_X(0, -1) = -2: Op_X(1, -1) = -1
  873. Op_X(-1, 0) = 0: Op_X(0, 0) = 0: Op_X(1, 0) = 0
  874. Op_X(-1, 1) = 1: Op_X(0, 1) = 2: Op_X(1, 1) = 1
  875.  
  876. Op_Y(-1, -1) = -1: Op_Y(0, -1) = 0: Op_Y(1, -1) = 1
  877. Op_Y(-1, 0) = -2: Op_Y(0, 0) = 0: Op_Y(1, 0) = 2
  878. Op_Y(-1, 1) = -1: Op_Y(0, 1) = 0: Op_Y(1, 1) = 1
  879.  
  880. Dim X As Integer, Y As Integer
  881. Dim fBias As Integer, fScaleFactor As Single
  882. Dim fRadius As Single, Sum As Single, RR2 As Single
  883. Dim MaxGaussianSize As Integer, GaussianSize As Integer
  884. Dim GaussianKernel() As Double, Kernel() As Single
  885. Dim KernelSize As Long
  886. Dim fKernel As Long, fWidth As Long, fHeight As Long, fCount As Long
  887. Dim SF As Single, Rad As Single, W As Single, C As Single
  888. Dim KWH As Long, KWL As Long, KHH As Long, KHL As Long
  889.  
  890. Pic8.Cls: Pic9.Cls: Pic10.Cls
  891. MaxGaussianSize = 50
  892. fBias = 0: fScaleFactor = 1: fCount = 1
  893. fRadius = InputBox("Masukkan Angka Tetha antara [0.5 - 2] : ", "Gaussian Blur Radius")
  894. If fRadius < 0 Then fRadius = 0
  895. If fRadius > 10 Then MsgBox "Masukkan angka antara [0.5 - 2]", vbInformation, "Angka Kelebihan": Exit Sub
  896. ReDim GaussianKernel(-MaxGaussianSize To MaxGaussianSize, -MaxGaussianSize To MaxGaussianSize)
  897.  
  898.  
  899. Sum = 0
  900. RR2 = -2 * fRadius * fRadius
  901.  
  902. For Y = -MaxGaussianSize To MaxGaussianSize
  903.     For X = -MaxGaussianSize To MaxGaussianSize
  904.         GaussianKernel(Y, X) = Exp((X * X + Y * Y) / RR2)
  905.         Sum = Sum + GaussianKernel(Y, X)
  906.     Next X
  907. Next Y
  908.  
  909. For Y = -MaxGaussianSize To MaxGaussianSize
  910.     For X = -MaxGaussianSize To MaxGaussianSize
  911.         GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
  912.     Next X
  913. Next Y
  914.  
  915. Sum = 0
  916. GaussianSize = MaxGaussianSize
  917. Do While (GaussianSize > 1) And (Sum < Delta)
  918.     Sum = Sum + 4 * GaussianKernel(0, GaussianSize)
  919.     GaussianSize = GaussianSize - 1
  920. Loop
  921.  
  922. For Y = -GaussianSize To GaussianSize
  923.     For X = -GaussianSize To GaussianSize
  924.         Sum = Sum + GaussianKernel(Y, X)
  925.     Next X
  926. Next Y
  927.  
  928. For Y = -GaussianSize To GaussianSize
  929.     For X = -GaussianSize To GaussianSize
  930.         GaussianKernel(Y, X) = GaussianKernel(Y, X) / Sum
  931.     Next X
  932. Next Y
  933.  
  934. KernelSize = (2 * GaussianSize) + 1
  935. SF = 0: Rad = 1
  936. Dim RKernel(99999) As Single, cnt As Integer
  937. cnt = 0
  938. For Y = -GaussianSize To GaussianSize
  939.     C = 0
  940.     For X = -GaussianSize To GaussianSize
  941.         W = Round((1 / GaussianKernel(GaussianSize, GaussianSize)) * GaussianKernel(Y, X))
  942.         RKernel(cnt) = W
  943.         SF = SF + W
  944.         C = C + 1
  945.         cnt = cnt + 1
  946.     Next X
  947.     Rad = Rad + 1
  948. Next Y
  949. fScaleFactor = SF
  950.  
  951. Me.Cls
  952. ReDim Kernel(1, Rad, C)
  953. cnt = 0
  954. Dim tmps As String
  955. Text1.Text = Text1.Text & vbCrLf
  956. Text1.Text = Text1.Text & "Mencari Kernel untuk Metode Canny" & vbCrLf
  957. Text1.Text = Text1.Text & "Langkah 1. Konversi gambar ke Gaussian Blur..." & vbCrLf
  958. Text1.Text = Text1.Text + "Hasil Kalkulasi Kernel dari Gaussian Blur >>" & vbCrLf
  959. Text1.SelStart = Len(Text1.Text)
  960. ReDim Kernel(0 To 1, -GaussianSize To GaussianSize, -GaussianSize To GaussianSize)
  961. For I = -GaussianSize To GaussianSize
  962.     For J = -GaussianSize To GaussianSize
  963.         Kernel(1, I, J) = RKernel(cnt)
  964.         tmps = tmps & Format(Kernel(1, I, J), "000") & " "
  965.         cnt = cnt + 1
  966.     Next J
  967.     Text1.Text = Text1.Text + tmps & vbCrLf
  968.     tmps = ""
  969. Next I
  970.  
  971. Text1.Text = Text1.Text + "Menggunakan Theta = " & fRadius & " dan Ukuran Kernel = " & KernelSize & " x " & KernelSize & " Pixel" & vbCrLf
  972. Text1.Text = Text1.Text + "Mengunakan Fungsi gambar 2D"
  973. Text1.SelStart = Len(Text1.Text)
  974.  
  975. Dim tmpIntR As Double, tmpIntG As Double, tmpIntB As Double
  976. Dim CTotal As Single
  977. Dim CDataR As Single, CDataG As Single, CDataB As Single
  978. Dim Intensity As Long, Grad As Single
  979.  
  980. CTotal = (((GaussianSize * GaussianSize) + GaussianSize) * 4) + 1
  981. Dim tmpC As Long
  982. Dim CountClr As Long
  983.  
  984. For Y = 0 To Pic1.Height - 1
  985.     For X = 0 To Pic1.Width
  986.         For J = -GaussianSize To GaussianSize
  987.             For I = -GaussianSize To GaussianSize
  988.                  PixelValue = GetPixel(Pic1.hdc, X + I, Y + J)
  989.                  DecTORGB PixelValue, R, G, B
  990.                  CDataR = CDataR + (Kernel(1, J, I) * R)
  991.                  CDataG = CDataG + (Kernel(1, J, I) * G)
  992.                  CDataB = CDataB + (Kernel(1, J, I) * B)
  993.                  If mX < C Then mX = mX + 1
  994.             Next I
  995.         Next J
  996.         CDataR = CDataR / (fScaleFactor + fBias)
  997.         CDataG = CDataG / (fScaleFactor + fBias)
  998.         CDataB = CDataB / (fScaleFactor + fBias)
  999.  
  1000.         SetPixel Pic8.hdc, X, Y, RGB(CDataR, CDataG, CDataB)
  1001.         Pic8.Refresh
  1002.         DoEvents
  1003.     Next X
  1004. Next Y
  1005. Pic8.Refresh
  1006. Text1.Text = Text1.Text & vbCrLf & vbCrLf & "Langkah 2. Konversi gambar ke Grayscale..." & vbCrLf
  1007. Text1.SelStart = Len(Text1.Text)
  1008. Dim Greycolor As Integer, PixNum As Integer
  1009. 'PixNum = InputBox("Masukkan Nilai Untuk Grayscale antara [0 - 255] :", "Input Grayscale")
  1010. PixNum = 90
  1011. If PixNum > 255 Then PixNum = 255
  1012. Text1.Text = Text1.Text & "Nilai Warna Grayscale = " & PixNum & vbCrLf
  1013. Text1.SelStart = Len(Text1.Text)
  1014. DoEvents
  1015. For Y = 0 To Pic8.Height
  1016.     For X = 0 To Pic8.Width
  1017.         PixelValue = GetPixel(Pic8.hdc, X, Y)
  1018.         DecTORGB PixelValue, R, G, B
  1019.         Greycolor = Greyscale(PixelValue, PixNum)
  1020.         SetPixel Pic9.hdc, X, Y, RGB(Greycolor, Greycolor, Greycolor)
  1021.         Pic9.Refresh
  1022.     Next X
  1023.     Pic9.Refresh
  1024. Next Y
  1025.  
  1026. Dim Itensity As Long, GradX As Long
  1027. Dim ThresholdMin As Integer, ThresholdMax As Integer
  1028. Dim sR As Long, sG As Long, sB As Long
  1029.  
  1030. Text1.Text = Text1.Text & vbCrLf & "Langkah 3. Filtering gambar mengunakan 2 Thresholds..." & vbCrLf
  1031. Text1.SelStart = Len(Text1.Text)
  1032. ThresholdMin = InputBox("Masukkan Nilai Min Threshold :", "Nilai Min Threshold")
  1033. If ThresholdMin > 255 Then ThresholdMin = 255
  1034. Text1.Text = Text1.Text & "Min Threshold = " & ThresholdMin & vbCrLf
  1035. Text1.SelStart = Len(Text1.Text)
  1036. ThresholdMax = InputBox("Masukkan Nilai Max Threshold :", "Nilai Max Threshold")
  1037. If ThresholdMax > 255 Then ThresholdMax = 255
  1038. Text1.Text = Text1.Text & "Max Threshold = " & ThresholdMax & vbCrLf
  1039. Text1.SelStart = Len(Text1.Text)
  1040. 'fScaleFactor = GaussianSize * GaussianSize
  1041. DoEvents
  1042. 'ThresholdMin = 0
  1043. 'ThresholdMax = 0
  1044.  
  1045. For Y = 0 To Pic1.Height - 1
  1046.     For X = 0 To Pic1.Width - 1
  1047.         GradX = 0: GradY = 0: Grad = 0
  1048.         If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
  1049.             Grad = 0
  1050.         Else
  1051.             For I = -1 To 1
  1052.                 For J = -1 To 1
  1053.                 PixelValue = GetPixel(Pic8.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  1054.                 DecTORGB PixelValue, R, G, B 'fungsi proses mendapatkan nilai RGB
  1055.                 Itensity = (R + G + B) / 3 'Itensitas / B & W
  1056.                 GradX = GradX + (Itensity * Op_X(I, J))
  1057.                 GradY = GradY + (Itensity * Op_Y(I, J))
  1058.                 Next J
  1059.             Next I
  1060.             Grad = Round(Sqr(Abs(GradX * GradX) + Abs(GradY * GradY)))
  1061.         End If
  1062.         If Grad >= ThresholdMin And Grad <= ThresholdMax Then
  1063.             Grad = Grad - Abs(((ThresholdMax + ThresholdMin) / KernelSize))
  1064.             If Grad <= ThresholdMax Then Grad = 0: If Grad >= ThresholdMax Then Grad = 255
  1065.             SetPixel Pic10.hdc, X, Y, RGB(Grad, Grad, Grad)
  1066.         Else
  1067.             If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
  1068.             SetPixel Pic10.hdc, X, Y, RGB(Grad, Grad, Grad)
  1069.         End If
  1070.         Pic10.Refresh
  1071.     Next X
  1072.     Pic10.Refresh
  1073. Next Y
  1074. Exit Sub
  1075. ErrHandle:
  1076. Exit Sub
  1077. End Sub
  1078.  
  1079. Public Function Greyscale(ByVal Colr As Long, PixelNum As Integer) As Integer
  1080.     Dim R As Long, G As Long, B As Long
  1081.     R = Colr Mod 256
  1082.     G = R Mod 256
  1083.     B = G Mod 256
  1084.     If R < 0 Then R = 0: If R > 255 Then R = 255
  1085.     If G < 0 Then G = 0: If G > 255 Then G = 255
  1086.     If B < 0 Then B = 0: If B > 255 Then B = 255
  1087.     Greyscale = PixelNum * (R / 255 + G / 255 + B / 255)
  1088. End Function
  1089.  
  1090. Private Sub Pic10_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  1091. Dim PixVal As Long, rR As Integer, rG As Integer, rB As Integer
  1092. PixVal = GetPixel(Pic10.hdc, X + I, Y + J) ' dapatkan pixel dari posisi x + i dan y + j
  1093. DecTORGB PixVal, rR, rG, rB
  1094. Text2.Text = rR & "-" & rG & "-" & rB
  1095. End Sub
  1096.